Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
В этой статье приводятся дополнительные замечания к справочной документации по этому API.
Класс HashSet<T> предоставляет высокопроизводительные операции с наборами. Набор представляет собой коллекцию, которая не содержит повторяющихся элементов и элементы которых не имеют определенного порядка.
Емкость HashSet<T> объекта — это количество элементов, которые может хранить объект. HashSet<T> Емкость объекта автоматически увеличивается по мере добавления элементов в объект.
Класс HashSet<T> основан на модели математических наборов и обеспечивает высокопроизводительные операции, аналогичные доступу к ключам Dictionary<TKey,TValue> или Hashtable коллекциям. В простых терминах HashSet<T> класс можно рассматривать как коллекцию без значений Dictionary<TKey,TValue> .
Коллекция HashSet<T> не отсортирована и не может содержать повторяющиеся элементы. Если порядок или дублирование элементов более важно, чем производительность приложения, рассмотрите возможность использования List<T> класса вместе с методом Sort .
HashSet<T> предоставляет множество математических операций над множествами, как например, объединение множеств и разность множеств. В следующей таблице перечислены предоставленные HashSet<T> операции и их математические эквиваленты.
| Операция с HashSet | Математический эквивалент |
|---|---|
| UnionWith | Объединение или добавление набора |
| IntersectWith | Пересечение |
| ExceptWith | Установка вычитания |
| SymmetricExceptWith | Симметричное различие |
Помимо перечисленных операций HashSet<T> набора класс также предоставляет методы для определения равенства наборов, перекрытия наборов и того, является ли набор подмножеством или супермножеством другого набора.
Только .NET Framework: Для очень крупных HashSet<T> объектов можно увеличить максимальную емкость до 2 миллиардов элементов в 64-разрядной системе, задав enabled атрибут <gcAllowVeryLargeObjects> элемента true конфигурации в среде выполнения.
Класс HashSet<T> реализует интерфейс ISet<T>.
Операции HashSet и операции множеств LINQ
LINQ предоставляет доступ к операции над наборами Distinct, Union, Intersect и Except для любого источника данных, реализующего интерфейсы IEnumerable или IQueryable.
HashSet<T> предоставляет более обширную и мощную коллекцию операций с множествами. Например, HashSet<T> предоставляет сравнения, такие как IsSubsetOf и IsSupersetOf.
Основное различие между операциями набора LINQ и HashSet<T> операциями заключается в том, что операции набора LINQ всегда возвращают новую IEnumerable<T> коллекцию, а HashSet<T> эквивалентные методы изменяют текущую коллекцию.
Как правило, если необходимо создать новый набор или если приложению требуется доступ только к предоставленным операциям набора, использование операций набора LINQ для любой IEnumerable<T> коллекции или массива будет достаточно. Тем не менее, если вашему приложению требуется доступ к дополнительным операциям над набором или если не желательно или необходимо создавать новую коллекцию, используйте класс HashSet<T>.
В следующей HashSet<T> таблице показаны операции и их эквивалентные операции набора LINQ.
| Операция с HashSet | Эквивалент LINQ |
|---|---|
| UnionWith | Union |
| IntersectWith | Intersect |
| ExceptWith | Except |
| Не предоставлено. | Distinct |
| SymmetricExceptWith | Не предоставлено. |
| Overlaps | Не предоставлено. |
| IsSubsetOf | Не предоставлено. |
| IsProperSubsetOf | Не предоставлено. |
| IsSupersetOf | Не предоставлено. |
| IsProperSupersetOf | Не предоставлено. |
| SetEquals | Не предоставлено. |